﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Runtime.Serialization;
using System.ComponentModel;

namespace elr_tracking_bal.CAT
{
    public class Moneda : INotifyPropertyChanged
    {
        private int _ID_MONEDA;
        private string _MONEDA;
        private string _MONEDA_ABR;

        public int ID_MONEDA
        {
            get
            {
                return _ID_MONEDA;
            }
            set
            {
                if (_ID_MONEDA != value)
                {
                    _ID_MONEDA = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("ID_MONEDA"));
                    }
                }
            }
        }

        public string MONEDA
        {
            get
            {
                return _MONEDA;
            }
            set
            {
                if (_MONEDA != value)
                {
                    _MONEDA = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("MONEDA"));
                    }
                }
            }
        }

        public string MONEDA_ABR
        {
            get
            {
                return _MONEDA_ABR;
            }
            set
            {
                if (_MONEDA_ABR != value)
                {
                    _MONEDA_ABR = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("MONEDA_ABR"));
                    }
                }
            }
        }

        /// <summary>
        /// Método que ejecuta el store para obtener las Monedas
        /// </summary>
        /// <returns></returns>
        public static DataTable GetData()
        {
            DataTable dt;
            dt = elr_tracking_dal.SrvDB.ExecuteQuery("exec SP_GETLIST_CAT_MONEDA");
            return dt;
        }
        /// <summary>
        /// Método par obtener la lista de monedas
        /// </summary>
        /// <returns></returns>
        public static List<Moneda> GetDataMoneda()
        {
            try
            {
                DataTable dt;
                dt = Moneda.GetData();
                if (dt.Rows.Count == 0)
                {
                    return null;
                }
                else
                {
                    List<Moneda> list = dt.AsEnumerable().Select(
                        row => new Moneda
                        {
                            ID_MONEDA = row.Field<int?>("ID_MONEDA").GetValueOrDefault(),
                            MONEDA = String.IsNullOrEmpty(row.Field<string>("MONEDA")) ? "" : row.Field<string>("MONEDA"),
                            MONEDA_ABR = String.IsNullOrEmpty(row.Field<string>("MONEDA_ABR")) ? "" : row.Field<string>("MONEDA_ABR"),
                        }
                        ).ToList();
                    return list;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Método para insertar una Moneda
        /// </summary>
        /// <param name="cat"></param>
        /// <returns></returns>
        public static elr_tracking_bal.UpsertStateMsg InsertMoneda(Moneda cat)
        {
            Moneda inser;
            elr_tracking_bal.UpsertStateMsg inserCat;
            try
            {
                int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_INSERT_CAT_MONEDA '" + cat.MONEDA + "','" + cat.MONEDA_ABR + "'");

                inser = new Moneda(cat.MONEDA, cat.MONEDA_ABR);
                inserCat = new elr_tracking_bal.UpsertStateMsg("Registros guardados " + dt.ToString(), true);
                return inserCat;
            }
            catch (Exception ex)
            {
                inserCat = new elr_tracking_bal.UpsertStateMsg("Error al guardar " + ex, false);
                return inserCat;
            }
        }
        /// <summary>
        /// Método para eliminar Monedas
        /// </summary>
        /// <param name="ID_MONEDA"></param>
        /// <returns></returns>
        public static elr_tracking_bal.DeleteStateMsg DeleteMoneda(string[] ID_MONEDA)
        {
            elr_tracking_bal.DeleteStateMsg delete;
            string join;
            if (ID_MONEDA == null)
            {
                join = "";
            }
            else
            {
                join = String.Join(",", ID_MONEDA);
            }
            try
            {
                int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_DELETE_CAT_MONEDA '" + join + "'");
                delete = new elr_tracking_bal.DeleteStateMsg("Registro eliminado" + dt.ToString(), true);
                return delete;
            }
            catch (Exception ex)
            {
                delete = new elr_tracking_bal.DeleteStateMsg("Error al eliminar" + ex, false);
                return delete;
            }
        }
        /// <summary>
        /// Método para actualizar una Moneda
        /// </summary>
        /// <param name="cat"></param>
        /// <returns></returns>
        public static elr_tracking_bal.UpsertStateMsg UpdateMoneda(Moneda cat)
        {
            Moneda update;
            UpsertStateMsg updateCat;
            try
            {
                int dt = elr_tracking_dal.SrvDB.ExecuteNonQuery("exec SP_UPDATE_CAT_MONEDA " + cat.ID_MONEDA + ",'" + cat.MONEDA + ",'"+cat.MONEDA_ABR+"'");

                update = new Moneda (cat.ID_MONEDA,cat.MONEDA,cat.MONEDA_ABR);
                updateCat = new UpsertStateMsg("Registros actualizados " + dt.ToString(), true);
                return updateCat;
            }
            catch (Exception ex)
            {
                updateCat = new UpsertStateMsg("Error al actualizar " + ex, false);
                return updateCat;
            }
        }
        /// <summary>
        /// Método para obtener una Moneda
        /// </summary>
        /// <param name="ID_MONEDA"></param>
        /// <returns></returns>
        public static Moneda GetOneMoneda(int ID_MONEDA)
        {
            try
            {
                Moneda cat;
                DataTable dt = elr_tracking_dal.SrvDB.ExecuteQuery("exec SP_GETONE_CAT_MONEDA " + ID_MONEDA + "");
                if (dt.Rows.Count == 0)
                {
                    return null;
                }
                else if (ID_MONEDA == 0)
                {
                    return null;
                }
                else
                {
                    cat = new  Moneda(Convert.ToInt32(dt.Rows[0]["ID_MONEDA"]), Convert.ToString(dt.Rows[0]["MONEDA"]),Convert.ToString(dt.Rows[0]["MONEDA_ABR"]));
                }
                return cat;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Constructor sin parámetros
        /// </summary>
        public Moneda() { }
        /// <summary>
        /// Constructor con dos parámetros
        /// </summary>
        /// <param name="MONEDA"></param>
        /// <param name="MONEDA_ABR"></param>
        public Moneda(string MONEDA, string MONEDA_ABR)
        {
            this._MONEDA = MONEDA;
            this._MONEDA_ABR = MONEDA_ABR;
        }
        /// <summary>
        /// Constructor con tres parámetros
        /// </summary>
        /// <param name="ID_MONEDA"></param>
        /// <param name="MONEDA"></param>
        /// <param name="MONEDA_ABR"></param>
        public Moneda(int ID_MONEDA, string MONEDA, string MONEDA_ABR)
        {
            this._ID_MONEDA = ID_MONEDA;
            this._MONEDA = MONEDA;
            this._MONEDA_ABR = MONEDA_ABR;
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}